#include <iostream>
#include <thread>
#include <future>
#include <chrono>

int Add(int num1, int num2){
    std::cout << "加法！！11111111\n";
    std::this_thread::sleep_for(std::chrono::seconds(5));
    std::cout << "加法！！22222222\n";
    return num1 + num2;
}

int main(){
    std::cout << "------------1------------\n";
    /*
        std::launch::deferred 在执行get获取异步结果的时候，才会执行异步任务
        std::launch::async 内部会创建工作线程，异步地完成任务，立马执行
        （通过打印边框可以看到过程的区别）
    */

    //std::future<int> result = std::async(std::launch::deferred, Add, 11, 22);
    std::future<int> result = std::async(std::launch::async, Add, 11, 22);
    std::this_thread::sleep_for(std::chrono::seconds(10));
    std::cout << "------------2------------\n";// conclusion:async时立马执行，deferred在get时才执行
    int sum = result.get();//会阻塞等待异步任务的返回结果
    std::cout << "------------3------------\n";
    std::cout << sum <<std::endl;

    return 0;
}